package com.grasp.forrobchance.services;

import android.accessibilityservice.AccessibilityService;
import android.annotation.SuppressLint;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;

import com.rooten.AppHandler;
import com.rooten.interf.IHandler;

import java.util.Calendar;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;

//@SuppressLint("NewApi")
//public class MyAccessibility111 extends AccessibilityService implements IHandler {
//
//    private static final String TAG                                         = "MyAccessibilityService";
//    private static final String PAGE_ActivityHome                           ="cn.newugo.app.home.activity.ActivityHome";
//    /** 课程列表 */
//    private static final String TAG_ActivityGroupCourseList                 = "cn.newugo.app.order.activity.ActivityGroupCourseList";
//    /** 课程详情界面 */
//    private static final String TAG_ActivityGroupCourseOrderDetail          = "cn.newugo.app.order.activity.ActivityGroupCourseOrderDetail";
//    /** 预约扣费界面 */
//    private static final String TAG_Order                                   = "cn.newugo.app.order.activity.ActivityGroupCourseOrder";
//    private static final String LISTEN_PACKAGENAME                          = "cn.newugo.app";
//
//    public static int HOUR1 = 12;
//    public static int HOUR2 = 14;
//    public static int MINUTE1 = 30;
//    public static int MINUTE2 = 6;
//    public static int SECOND1 = 5;
//    public static int SECOND2 = 5;
//
//    private AppHandler mHandler    = new AppHandler(this);
//    /**
//     * 时间循环
//     */
//    private int MSG_UPDATE_TIME = 111;
//    private int MSG_UPDATE_DELAY = 112;
//
//    /**
//     * 主页的AccessibilityEvent
//     */
//    private AccessibilityEvent mEvent;
//
//    /**
//     * 计时器
//     */
//    private Timer mTimer;
//
//    @Override
//    public void onCreate() {
//        super.onCreate();
//    }
//
//    @Override
//    public void onDestroy() {
//        super.onDestroy();
//    }
//
//    //服务连接成功时的回调
//    @Override
//    protected void onServiceConnected() {
//        super.onServiceConnected();
//        Log.e(TAG, "MyAccessibilityService onServiceConnected");
//
//        startClocking(); // -----------------------------------
//    }
//
//    //接收到系统发送AccessibilityEvent时的回调
//    @Override
//    public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) {
//        Log.e(TAG, "MyAccessibilityService onAccessibilityEvent: " + accessibilityEvent);
//        String packageName = accessibilityEvent.getPackageName().toString();
//        if (LISTEN_PACKAGENAME.equals(packageName)){
//            Log.e(TAG, "MyAccessibilityService packageName true");
//            int eventType = accessibilityEvent.getEventType();
//            switch (eventType){
//                case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED:
//                    Log.e(TAG, "MyAccessibilityService TYPE_VIEW_ACCESSIBILITY_FOCUSED");
//                    break;
//                case AccessibilityEvent.TYPE_VIEW_CLICKED:
//                    Log.e(TAG, "MyAccessibilityService TYPE_VIEW_CLICKED");
//                    break;
//                case AccessibilityEvent.TYPE_VIEW_FOCUSED:
//                    Log.e(TAG, "MyAccessibilityService TYPE_VIEW_FOCUSED");
//                    break;
//                case AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED:
//                    Log.e(TAG, "MyAccessibilityService TYPE_VIEW_TEXT_CHANGED");
//                    break;
//                case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:  // 页面跳转, 回调参数为当前页面显示的Activity（跳转之后）
//                    mEvent = accessibilityEvent; // 记录当前页面的event
//                    onActivityStatusChanged(accessibilityEvent);
//                    try {
//                        Log.e(TAG, "MyAccessibilityService TYPE_WINDOW_STATE_CHANGED");
//                    } catch (Exception e) {
//                        e.printStackTrace();
//                        Log.e(TAG, e.getMessage());
//                    }
//                    break;
//            }
//        }else{
//            Log.e(TAG, "MyAccessibilityService packageName error: " + packageName);
//        }
//    }
//
//    /**
//         * 页面发生变换
//         */
//    private void onActivityStatusChanged(AccessibilityEvent accessibilityEvent){
//        Log.e(TAG, "-------页面发生切换");  // ActivityHome
//        // 进入**页面
//        Message msg = new Message();
////        msg.obj = accessibilityEvent;
//        mHandler.sendMessageDelayed(msg, 500);
//    }
//
//    @Override
//    public boolean handleMessage(Message msg) {
//        Log.e(TAG, "-------收到消息");
//        if(msg == null) {
//            Log.e(TAG, "-------消息内容丢失");
//            return true;
//        }
//        if(MSG_UPDATE_TIME == msg.what){
//            // 检查当前时间，准备点开页面抢
//            checkTime();
//            return true;
//        }
//        else if (MSG_UPDATE_DELAY == msg.what){
//            // 到时间了，稍微慢点点开页面抢
//            onActivityStatusChanged(mEvent); // 这边只是从当前页面发起一次（只点击一次）
//            return true;
//        }
//
////        Log.e(TAG, "-------msg.obj：" + msg.obj);
////        AccessibilityEvent event = (AccessibilityEvent)msg.obj;
//        if(mEvent == null)return true;
//        String className = mEvent.getClassName().toString();
//        switch (className) {    // 当前在那个页面
//            case PAGE_ActivityHome: {
//                // 跳转进入 - 主页
//                Log.e(TAG, "已跳转进入 - 【主页】");
//                performClickFirstBtnByBtnRegex(mEvent, "课程表", 0, false, false);
//                break;
//            }
//
//            case TAG_ActivityGroupCourseList: {
//                // 跳转进入 - [课程表]界面
//                Log.e(TAG, "已跳转进入 - 【课程表界面】");
//                if(Calendar.getInstance().get(Calendar.HOUR_OF_DAY) == HOUR1){
//                    // 12:30开抢18:30的座位
//                    performClickFirstBtnByBtnRegex(mEvent, "动感单车", 0, false, false);
//                }
//                else if(Calendar.getInstance().get(Calendar.HOUR_OF_DAY) == HOUR2){
//                    // 13:30开抢19:30的座位
//                    performClickFirstBtnByBtnRegex(mEvent, "动感单车", 1, false, false);
//                }
//                else{
//                    Log.e(TAG, "当前时间很尴尬，不知道要抢那个点的动感单车，所以不抢");
//                }
//
//                break;
//            }
//
//            case TAG_ActivityGroupCourseOrderDetail: {
//                // 跳转进入 - 【课程详情】界面
//                Log.e(TAG, "已跳转进入 - 【课程详情】");
//                performClickFirstBtnByBtnRegex(mEvent, "立即预约", 0, false, false);
//                break;
//            }
//
//            case TAG_Order: {
//                // 跳转进入 - 【预约扣费】界面
//                Log.e(TAG, "已跳转进入 - 【预约扣费】");
//                performClickFirstBtnByBtnRegex(mEvent, "1", 0, false, false); // 选号界面排除第一个
//                break;
//            }
//
//        }
//
//        return false;
//    }
//
//    /**
//     * 模拟点击页面中指定名称的第N个的按钮
//     * @param accessibilityEvent
//     * @param regex
//     * @param index 从0开始
//     * @param isUseId 是否通过ID来寻找控件 例如 cn.newugo.app:id/lay_club_joined_list_footer_qr_code
//     */
//    private void performClickFirstBtnByBtnRegex(AccessibilityEvent accessibilityEvent, String regex, int index, boolean isUseId, boolean isJustConfirm){
//        if(!justiceIfAuto()) {
//            Log.e(TAG, "没到时间，不自动跳转");
//            return;       // 没到时间不自动跳转
//        }
//        if(TextUtils.isEmpty(regex)) {
//            Log.e(TAG, "指定按钮名称为空，请检查");
//            return;
//        }
//        AccessibilityNodeInfo ani = accessibilityEvent.getSource();
//
//        List<AccessibilityNodeInfo> anis;
//        if (ani == null) return;
//        if (isUseId){
//            anis = ani.findAccessibilityNodeInfosByViewId(regex);
//        }
//        else{
//            anis = ani.findAccessibilityNodeInfosByText(regex);
//        }
//
//        if(anis == null || anis.size() < index + 1){
//            Log.e(TAG, "-------未找到指定名称名称的控件：" + regex);
//            if(TextUtils.equals(regex, "立即预约")){
//                // 获取UiDevice实例
//
//                performGlobalAction(AccessibilityService.GLOBAL_ACTION_BACK);
//                Log.e(TAG, "-------活动未开始，赶紧返回");
//            }
//            return;
//        }
////        Log.e(TAG, "-------是否可点击：" + anis.get(index).isClickable());
////        if(!anis.get(index).isClickable()){
////            return;
////        }
//
//        String className = accessibilityEvent.getClassName().toString();
//        if(TextUtils.equals(regex, "课程表") || TextUtils.equals(regex, "动感单车")){
//            if(anis.get(index) == null){
//                return;
//            }
//            anis.get(index).getParent().performAction(AccessibilityNodeInfo.ACTION_CLICK);
//        }
//        else if(TextUtils.equals(className, TAG_Order)){ // 具体选号界面
//            if(!isJustConfirm){
//                // 来选号
//                int childCount = anis.get(index).getParent().getChildCount();
//                boolean existItemCanBook = false;
//                for(int i = 7; i < childCount; i++){
//                    if(!anis.get(index).getParent().getChild(i).isClickable()) continue;
//                    anis.get(index).getParent().getChild(i).performAction(AccessibilityNodeInfo.ACTION_CLICK);
//                    existItemCanBook = true;
//                    Log.e(TAG, "-------已选定号码：" + anis.get(index).getParent().getChild(i).getText());
//                    break;
//                }
//                if(!existItemCanBook){
////                TOAST.showShort("本页面为发现吸预约项目");
//                    Log.e(TAG, "-------本页面为发现吸预约项目");
//                }
//                // 选择号码成功，去点击【确认预约】按钮
//                Log.e(TAG, "-------选定号码，开始模拟点击【确认预约】");
//                performClickFirstBtnByBtnRegex(accessibilityEvent, "确认预约", 1, false, true);
//            }
//            else{
//                // 选完号点击[确认预约]
//                anis.get(index).performAction(AccessibilityNodeInfo.ACTION_CLICK);
//                Log.e(TAG, "-------已确认预约");
//            }
//        }
//        else{
//            // 立即预约
//            anis.get(index).performAction(AccessibilityNodeInfo.ACTION_CLICK);
//        }
//        Log.e(TAG, "-------模拟点击成功：" + regex);
//    }
//
//
//
//    //服务中断时的回调
//    @Override
//    public void onInterrupt() {
//        Log.e(TAG, "MyAccessibilityService onInterrupt");
//    }
//
//    /**
//     * 检查当前时间，触发任务【模拟点击】
//     */
//    private void checkTime(){
//        if(!justiceIfAuto()) return;
//        // 到开枪时间，不是项目时间
//        // 这里慢一点
////        Message msg = new Message();
////        msg.what = MSG_UPDATE_DELAY;
////        mHandler.sendMessageDelayed(msg, 300);
//        onActivityStatusChanged(mEvent); // 这边只是从当前页面发起一次（只点击一次）
//        mTimer.cancel();
//    }
//
//    /**
//     * 添加一个本地计时器<br/>
//     * 代码计时器，在到达时间后【触发一次】
//     */
//    private void startClocking(){
//        TimerTask timeTask = new TimerTask()
//        {
//            @Override
//            public void run()
//            {
//                // 开始计时
//                mHandler.sendEmptyMessage(MSG_UPDATE_TIME);
//            }
//        };
//        mTimer = new Timer();
//        mTimer.schedule(timeTask, 500, 200);
//    }
//
//    /**
//     * 以当前时间判断是否能去实现【自动预约】
//     */
//    private boolean justiceIfAuto(){
//        int hour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY);
//        int minute = Calendar.getInstance().get(Calendar.MINUTE);
//        int second = Calendar.getInstance().get(Calendar.SECOND);
//        if(hour == HOUR1 && minute == MINUTE1 && second <= SECOND1){
//            return true;
//        }
//        else if(hour == HOUR2 && minute == MINUTE2 && second <= SECOND2){
//            return true;
//        }
//        Log.e(TAG, "-------未到开抢时间，所以不动");
//        return false; // 这里为false则代表只在开抢后一定时间范围内【自动预约】，为true则代表全天干预用户操作
//    }
//
//    /**
//     * 当点击【确认预约】按钮之后执行该方法
//     * @param accessibilityEvent
//     */
//    private void checkBookAgain(AccessibilityEvent accessibilityEvent){
//        // 建档当前页面是否有【预约成功】Textview，且其为可见
//        // 检查当前页面有没有TextView的按钮名为【重新预约】，且其为可见
//        // 检查当前【确认预约】按钮不可见
////        if(!justiceIfAuto()) {
////            Log.e(TAG, "没到时间，不自动跳转");
////            return;       // 没到时间不自动跳转
////        }
////        AccessibilityNodeInfo ani = accessibilityEvent.getSource();
////
////        List<AccessibilityNodeInfo> anis;
////        if (ani == null) return;
////        anis = ani.findAccessibilityNodeInfosByText("预约成功");
////        Log.e(TAG, "检测到【预约成功】");
////        if(anis == null || anis.size() > 1){
////            Log.e(TAG, "-------今天可能没有18:30的动感单车");
////            return;
////        }
////        Log.e(TAG, "-------是否可点击：" + anis.get(index).isClickable());
////        if(!anis.get(index).isClickable()){
////            return;
////        }
//
//    }
//}
